我的Bilibili频道:香芋派Taro
我的个人博客:taropie0224.github.io(阅读体验更佳)
我的公众号:香芋派的烘焙坊
我的音频技术交流群:1136403177
我的个人微信:JazzyTaroPie

https://leetcode-cn.com/problems/symmetric-tree/

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution
{
public:
bool isSymmetric(TreeNode *root)
{
if (!root)
return true;
return dfs(root->left, root->right);
}
bool dfs(TreeNode *p, TreeNode *q)
{
if (!p && !q)
return true;
if (!p || !q)
return false;
if (p->val != q->val)
return false;
return dfs(p->left, q->right) && dfs(p->right, q->left);
}
};

思路

具体实现过程:

  1. 我们定义两个指针p和q ,让p和q指针一开始分别指向左子树和右子树。
  2. 同步移动这两个指针来遍历这棵树,每次检查当前 p 和q 节点的值是否相等,如果相等再判断左右子树是否对称。

判断部分:

  1. p和q节点都为空时,左右子树都为空,返回true
  2. p和q节点只有一个为空时,左右子树不对称,返回false
  3. p和q节点值不相等,左右子树不对称,返回false